package main

import (
	"fmt"
	"sync"
)

// SingleTon 单例模式-懒汉式 使用时初始化实例
type SingleTon struct {
}

var instance *SingleTon
var once sync.Once

func GetInstance() *SingleTon {
	//once.do()保证并发情况下只会调用内部函数一次 等价于 双检锁
	once.Do(func() {
		instance = &SingleTon{}
	})
	return instance
}

func main() {
	s1 := GetInstance()
	s2 := GetInstance()
	if s1 == s2 {
		fmt.Println("the same obj")
	}
}
